{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Diabetes Classification By LogisticRegression And SVM\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 首先 import 必要的模块\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn import metrics\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读取数据 & 数据探索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 133,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>6</td>\n",
       "      <td>148</td>\n",
       "      <td>72</td>\n",
       "      <td>35</td>\n",
       "      <td>0</td>\n",
       "      <td>33.6</td>\n",
       "      <td>0.627</td>\n",
       "      <td>50</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>85</td>\n",
       "      <td>66</td>\n",
       "      <td>29</td>\n",
       "      <td>0</td>\n",
       "      <td>26.6</td>\n",
       "      <td>0.351</td>\n",
       "      <td>31</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8</td>\n",
       "      <td>183</td>\n",
       "      <td>64</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>23.3</td>\n",
       "      <td>0.672</td>\n",
       "      <td>32</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>89</td>\n",
       "      <td>66</td>\n",
       "      <td>23</td>\n",
       "      <td>94</td>\n",
       "      <td>28.1</td>\n",
       "      <td>0.167</td>\n",
       "      <td>21</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>137</td>\n",
       "      <td>40</td>\n",
       "      <td>35</td>\n",
       "      <td>168</td>\n",
       "      <td>43.1</td>\n",
       "      <td>2.288</td>\n",
       "      <td>33</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pregnancies  Glucose  BloodPressure  SkinThickness  Insulin   BMI  \\\n",
       "0            6      148             72             35        0  33.6   \n",
       "1            1       85             66             29        0  26.6   \n",
       "2            8      183             64              0        0  23.3   \n",
       "3            1       89             66             23       94  28.1   \n",
       "4            0      137             40             35      168  43.1   \n",
       "\n",
       "   DiabetesPedigreeFunction  Age  Outcome  \n",
       "0                     0.627   50        1  \n",
       "1                     0.351   31        0  \n",
       "2                     0.672   32        1  \n",
       "3                     0.167   21        0  \n",
       "4                     2.288   33        1  "
      ]
     },
     "execution_count": 133,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 读取数据\n",
    "# path to where the data lies\n",
    "#dpath = './data/'\n",
    "train = pd.read_csv(\"diabetes.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 768 entries, 0 to 767\n",
      "Data columns (total 9 columns):\n",
      "Pregnancies                 768 non-null int64\n",
      "Glucose                     768 non-null int64\n",
      "BloodPressure               768 non-null int64\n",
      "SkinThickness               768 non-null int64\n",
      "Insulin                     768 non-null int64\n",
      "BMI                         768 non-null float64\n",
      "DiabetesPedigreeFunction    768 non-null float64\n",
      "Age                         768 non-null int64\n",
      "Outcome                     768 non-null int64\n",
      "dtypes: float64(2), int64(7)\n",
      "memory usage: 54.1 KB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 135,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>3.845052</td>\n",
       "      <td>120.894531</td>\n",
       "      <td>69.105469</td>\n",
       "      <td>20.536458</td>\n",
       "      <td>79.799479</td>\n",
       "      <td>31.992578</td>\n",
       "      <td>0.471876</td>\n",
       "      <td>33.240885</td>\n",
       "      <td>0.348958</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>3.369578</td>\n",
       "      <td>31.972618</td>\n",
       "      <td>19.355807</td>\n",
       "      <td>15.952218</td>\n",
       "      <td>115.244002</td>\n",
       "      <td>7.884160</td>\n",
       "      <td>0.331329</td>\n",
       "      <td>11.760232</td>\n",
       "      <td>0.476951</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.078000</td>\n",
       "      <td>21.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>99.000000</td>\n",
       "      <td>62.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>27.300000</td>\n",
       "      <td>0.243750</td>\n",
       "      <td>24.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>117.000000</td>\n",
       "      <td>72.000000</td>\n",
       "      <td>23.000000</td>\n",
       "      <td>30.500000</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>0.372500</td>\n",
       "      <td>29.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>6.000000</td>\n",
       "      <td>140.250000</td>\n",
       "      <td>80.000000</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>127.250000</td>\n",
       "      <td>36.600000</td>\n",
       "      <td>0.626250</td>\n",
       "      <td>41.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>17.000000</td>\n",
       "      <td>199.000000</td>\n",
       "      <td>122.000000</td>\n",
       "      <td>99.000000</td>\n",
       "      <td>846.000000</td>\n",
       "      <td>67.100000</td>\n",
       "      <td>2.420000</td>\n",
       "      <td>81.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       Pregnancies     Glucose  BloodPressure  SkinThickness     Insulin  \\\n",
       "count   768.000000  768.000000     768.000000     768.000000  768.000000   \n",
       "mean      3.845052  120.894531      69.105469      20.536458   79.799479   \n",
       "std       3.369578   31.972618      19.355807      15.952218  115.244002   \n",
       "min       0.000000    0.000000       0.000000       0.000000    0.000000   \n",
       "25%       1.000000   99.000000      62.000000       0.000000    0.000000   \n",
       "50%       3.000000  117.000000      72.000000      23.000000   30.500000   \n",
       "75%       6.000000  140.250000      80.000000      32.000000  127.250000   \n",
       "max      17.000000  199.000000     122.000000      99.000000  846.000000   \n",
       "\n",
       "              BMI  DiabetesPedigreeFunction         Age     Outcome  \n",
       "count  768.000000                768.000000  768.000000  768.000000  \n",
       "mean    31.992578                  0.471876   33.240885    0.348958  \n",
       "std      7.884160                  0.331329   11.760232    0.476951  \n",
       "min      0.000000                  0.078000   21.000000    0.000000  \n",
       "25%     27.300000                  0.243750   24.000000    0.000000  \n",
       "50%     32.000000                  0.372500   29.000000    0.000000  \n",
       "75%     36.600000                  0.626250   41.000000    1.000000  \n",
       "max     67.100000                  2.420000   81.000000    1.000000  "
      ]
     },
     "execution_count": 135,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "## 各属性的统计特性\n",
    "train.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Target 分布，看看各类样本分布是否均衡\n",
    "sns.countplot(train.Outcome);\n",
    "pyplot.xlabel('Diabetes');\n",
    "pyplot.ylabel('Number of occurrences');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 观察Y值分布发现，患病数与健康数目不均衡，且检测患病比检测健康的重要性更高，故此次问题为不均衡二分类问题"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pregnancies                 0\n",
       "Glucose                     0\n",
       "BloodPressure               0\n",
       "SkinThickness               0\n",
       "Insulin                     0\n",
       "BMI                         0\n",
       "DiabetesPedigreeFunction    0\n",
       "Age                         0\n",
       "Outcome                     0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.isnull().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 两两特征之间的相关性"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面首先考察每个特征与Y值的关系，看是否有明显规律"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 138,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x25992b21128>"
      ]
     },
     "execution_count": 138,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = pyplot.figure()\n",
    "#my_x_ticks = np.arange(0, 18, 1)\n",
    "#my_x_ticks = np.arange(0, 18, 1)\n",
    "#pyplot.xticks(my_x_ticks)\n",
    "\n",
    "pyplot.scatter(train[\"Pregnancies\"],train[\"Outcome\"],color='red')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 139,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x25992b36908>"
      ]
     },
     "execution_count": 139,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = pyplot.figure()\n",
    "pyplot.scatter(train[\"Glucose\"],train[\"Outcome\"],color='orange')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x25992d77320>"
      ]
     },
     "execution_count": 140,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAEexJREFUeJzt3Xus5Gddx/H3h91ucUHl0oORvfSUZEEXopaeNFWMIq1hW03rH2i2KRFjw8YiXonapoZgDTFeIkjSoquWlouUircNWawGazSG1p6K1F5YXQu0x4JdEKqRQFn4+sf8KrPTOef8Zs+cyzx9v5LJmeeZZ57f9zfP/D47+5s5Z1JVSJLa8rTNLkCSNH2GuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalB2zdrw2eddVbNz89v1uYlaSbdfffdn6mqudXGbVq4z8/Ps7i4uFmbl6SZlOSTfcZ5WkaSGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAatGu5JbkzyaJJ7l7k9Sd6W5HiSe5K8dPplSpIm0eeV+03AgRVuvxjY110OAW9fe1nLyZiLxnsPMM9giee79lbfxrj5dnHqeu8CLhrpuwh4HYPfyUv383XLzDdu3M6R+UbbT8XLtgnGjluPcX1912PcuI247zgbcRytk6pa9cJgr+5d5rbfAy4fah8Dvnm1Oc8777yazErT6VTvrqqddepjtLPr36rbGDffWi/bRtpPm/L8XtZ2WW49to+0d1TVGaus7TTue1WdaiOOo8kBizV+B065TOOc+y7g4aH2UtenTXMt8IWRvi90/Vt1G+PmW6uvjLS/OuX5tTbLrcfJkfbjwJdH+kbXdhr3PTzS3ojjaP1MI9zHnRupsQOTQ0kWkyyeOHFiCpvWeA9N2L8VtjHN2qTTMRr6G3EcrZ9phPsSsGeovRt4ZNzAqjpcVQtVtTA3t+ofNdNp2zth/1bYxjRrk07HtpH2RhxH62ca4X4E+NHuUzMXAI9V1aemMK9O25sZvCk4bGfXv1W3MW6+tRo9WP3k79ay3HqM/rHaHcAZI32jazuN+x4aaW/EcbR++nwU8r3Ah4EXJVlKcmWSn0jyE92Qo8CDwHHg91n+bec1GnumZ4X+p7IrGJw/PJvBWbOzu/YVW3gb4+Z7N/D8kXHPBy4c6bsQuIqvHbTbuvbNI/O9c5lxXzcy32j7qWiSfwjHrce4vnfTbz1uGhl3I/COkb6b1+G+N4zUvBHH0frJ4M3XjbewsFD+PXdJmkySu6tqYbVx/j9VkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNahXuCc5kORYkuNJrh5z+94ktyf5SJJ7klwy/VIlSX2tGu5JtgHXAxcD+4HLk+wfGfbLwK1VdS5wELhh2oVKkvrr88r9fOB4VT1YVY8DtwCXjYwp4Bu6698IPDK9EiVJk+oT7ruAh4faS13fsDcBr06yBBwFfmrcREkOJVlMsnjixInTKFeS1EefcM+YvhppXw7cVFW7gUuAdyV50txVdbiqFqpqYW5ubvJqJUm99An3JWDPUHs3Tz7tciVwK0BVfRh4OnDWNAqUJE2uT7jfBexLck6SHQzeMD0yMuYh4EKAJN/KINw97yJJm2TVcK+qk8DrgduABxh8Kua+JNclubQb9gbgtUk+CrwX+LGqGj11I0naINv7DKqqowzeKB3ue+PQ9fuBl023NEnS6fI3VCWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGtQr3JMcSHIsyfEkVy8z5keS3J/kviR/NN0yJUmT2L7agCTbgOuB7weWgLuSHKmq+4fG7AOuAV5WVZ9L8rz1KliStLo+r9zPB45X1YNV9ThwC3DZyJjXAtdX1ecAqurR6ZYpSZpEn3DfBTw81F7q+oa9EHhhkn9IckeSA9MqUJI0uVVPywAZ01dj5tkHvBzYDfx9kpdU1edPmSg5BBwC2Lt378TFSpL66fPKfQnYM9TeDTwyZsxfVNWXq+rjwDEGYX+KqjpcVQtVtTA3N3e6NUuSVtEn3O8C9iU5J8kO4CBwZGTMnwPfB5DkLAanaR6cZqGSpP5WDfeqOgm8HrgNeAC4taruS3Jdkku7YbcBn01yP3A78AtV9dn1KlqStLJUjZ4+3xgLCwu1uLi4KduWpFmV5O6qWlhtnL+hKkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhrUK9yTHEhyLMnxJFevMO5VSSrJwvRKlCRNatVwT7INuB64GNgPXJ5k/5hxXw/8NHDntIuUJE2mzyv384HjVfVgVT0O3AJcNmbcrwK/AXxxivVJkk5Dn3DfBTw81F7q+v5fknOBPVX1gZUmSnIoyWKSxRMnTkxcrCSpnz7hnjF99f83Jk8D3gK8YbWJqupwVS1U1cLc3Fz/KiVJE+kT7kvAnqH2buCRofbXAy8B/jbJJ4ALgCO+qSpJm6dPuN8F7EtyTpIdwEHgyBM3VtVjVXVWVc1X1TxwB3BpVS2uS8WSpFWtGu5VdRJ4PXAb8ABwa1Xdl+S6JJeud4GSpMlt7zOoqo4CR0f63rjM2JevvSxJ0lr4G6qS1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ3qFe5JDiQ5luR4kqvH3P7zSe5Pck+SDyU5e/qlSpL6WjXck2wDrgcuBvYDlyfZPzLsI8BCVX0b8H7gN6ZdqCSpvz6v3M8HjlfVg1X1OHALcNnwgKq6vaq+0DXvAHZPt0xJ0iT6hPsu4OGh9lLXt5wrgQ+upShJ0tps7zEmY/pq7MDk1cAC8L3L3H4IOASwd+/eniVKkibV55X7ErBnqL0beGR0UJKLgGuBS6vqS+MmqqrDVbVQVQtzc3OnU68kqYc+4X4XsC/JOUl2AAeBI8MDkpwL/B6DYH90+mVKkiaxarhX1Ung9cBtwAPArVV1X5LrklzaDftN4JnAHyf55yRHlplOkrQB+pxzp6qOAkdH+t44dP2iKdclSVoDf0NVkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNahXuCc5kORYkuNJrh5z+5lJ3tfdfmeS+WkX2m1pzKVl7wHmGSzTfNfeiPtOe74Xc+qavRh4HbC9a2/v2uPG7Rjp27FM3zbGPz+8rP9l15j2RWPGnTnSvojxz6txz42+xt133DamfXz0tYHbraoVLwyOmn8HXsDgKPoosH9kzOuA3+2uHwTet9q85513Xk1mpela9O6q2lmn7ufOrn897zvt+U55qnjxMnLJSHvbMuOuqtVdtcx9nzbSPqOqdoz0reX46Gs6xyWwWD0e3AzGLi/JdwJvqqpXdu1run8Ufm1ozG3dmA8n2Q58GpirFSZfWFioxcXFCf4Zygq3rbwPs2ke+OSY/rOBT6zjfac930rrJvW1DTi5ypjtwFfWsI3TPT76mmcax2WSu6tqYbVxfU7L7AIeHmovdX1jx1TVSeAx4LljijqUZDHJ4okTJ3ps+qnsoQn7p3XfjZhPmlSf0F5LsMP6P5839jjqE+7jXnqNvlTuM4aqOlxVC1W1MDc316e+p7C9E/ZP674bMZ80qW1TGrOS9X4+b+xx1Cfcl4A9Q+3dwCPLjelOy3wj8F/TKPCp683AzpG+nV3/et532vPtP81t6qlh9HXhcgF9qMdcy40ZjbkzGLx9OGwtx0df0z4uV9Yn3O8C9iU5J8kOBm+YHhkZcwR4TXf9VcDfrHS+/fQsN12L59sBrgAOMzgfl+7n4a5/Pe877fnu48kBvx+4iq8dyNu69rhxZ4z0nbFMn5/q3TzPH9O+cMy40UC9EHgXpz6vbmb8c+OGHnXcsMx93zmyjXcANzK946OvaR+XK1v1DVWAJJcAb2XwaN1YVW9Och2Dd22PJHk6g1U6l8Er9oNV9eBKc07+hqokqe8bqtv7TFZVR4GjI31vHLr+ReCHJy1SkrQ+/L+sJDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkN6vVLTOuy4eQE4/9EWh9nAZ+ZYjmbxf3YWtyPrcX9GO/sqlr1j3NtWrivRZLFPr+htdW5H1uL+7G1uB9r42kZSWqQ4S5JDZrVcD+82QVMifuxtbgfW4v7sQYzec5dkrSyWX3lLklawcyFe5IDSY4lOZ7k6s2up68ke5LcnuSBJPcl+Zmu/zlJ/jrJv3U/n73Zta4mybYkH0nyga59TpI7u314X/elLltakmcleX+Sj3Vr8p0zuhY/1z2f7k3y3iRPn4X1SHJjkkeT3DvUN/bxz8DbumP+niQv3bzKT7XMfvxm97y6J8mfJXnW0G3XdPtxLMkr17O2mQr3JNuA64GLGXxNz+VJZuV73E4Cb6iqbwUuAH6yq/1q4ENVtQ/4UNfe6n4GeGCo/evAW7p9+Bxw5aZUNZnfAf6yqr4F+HYG+zNTa5FkF/DTwEJVvYTBl+kcZDbW4ybgwEjfco//xcC+7nIIePsG1djHTTx5P/4aeElVfRvwr8A1AN3xfhB4cXefG7pMWxczFe7A+cDxqnqwqh4HbgEu2+SaeqmqT1XVP3XX/4dBmOxiUP/N3bCbgR/anAr7SbIb+AHgD7p2gFcA7++GzMI+fAPwPcAfAlTV41X1eWZsLTrbga/rvrt4J/ApZmA9qurvePL3LC/3+F8GvLMG7gCeleSbN6bSlY3bj6r6q6o62TXvYPC90zDYj1uq6ktV9XHgOINMWxezFu67gIeH2ktd30xJMs/gKwnvBL6pqj4Fg38AgOdtXmW9vBX4ReCrXfu5wOeHnsyzsCYvAE4A7+hOL/1BkmcwY2tRVf8B/BbwEINQfwy4m9lbjycs9/jP8nH/48AHu+sbuh+zFu6jX5UOM/YN2UmeCfwJ8LNV9d+bXc8kkvwg8GhV3T3cPWboVl+T7cBLgbdX1bnA/7LFT8GM052Tvgw4h8G3Uj+DwSmMUVt9PVYzi88xklzL4HTse57oGjNs3fZj1sJ9Cdgz1N4NPLJJtUwsyRkMgv09VfWnXfd/PvFfzO7no5tVXw8vAy5N8gkGp8ReweCV/LO60wIwG2uyBCxV1Z1d+/0Mwn6W1gLgIuDjVXWiqr4M/CnwXczeejxhucd/5o77JK8BfhC4or72efMN3Y9ZC/e7gH3dpwF2MHhz4sgm19RLd276D4EHquq3h246Arymu/4a4C82ura+quqaqtpdVfMMHvu/qaorgNuBV3XDtvQ+AFTVp4GHk7yo67oQuJ8ZWovOQ8AFSXZ2z68n9mOm1mPIco//EeBHu0/NXAA89sTpm60oyQHgl4BLq+oLQzcdAQ4mOTPJOQzeIP7HdSukqmbqAlzC4B3ofweu3ex6Jqj7uxn8F+we4J+7yyUMzll/CPi37udzNrvWnvvzcuAD3fUXdE/S48AfA2dudn096v8OYLFbjz8Hnj2LawH8CvAx4F7gXcCZs7AewHsZvE/wZQavaK9c7vFncDrj+u6Y/xcGnw7a9H1YYT+OMzi3/sRx/rtD46/t9uMYcPF61uZvqEpSg2bttIwkqQfDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBv0f8iC8WOK7dcoAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = pyplot.figure()\n",
    "pyplot.scatter(train[\"BloodPressure\"],train[\"Outcome\"],color='yellow')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 141,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x2599151e0f0>"
      ]
     },
     "execution_count": 141,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = pyplot.figure()\n",
    "pyplot.scatter(train[\"SkinThickness\"],train[\"Outcome\"],color='green')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 142,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x25992910a20>"
      ]
     },
     "execution_count": 142,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = pyplot.figure()\n",
    "pyplot.scatter(train[\"Insulin\"],train[\"Outcome\"],color='blue')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 143,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x25992cbdeb8>"
      ]
     },
     "execution_count": 143,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = pyplot.figure()\n",
    "pyplot.scatter(train[\"BMI\"],train[\"Outcome\"],color='aqua')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 144,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x25992c501d0>"
      ]
     },
     "execution_count": 144,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = pyplot.figure()\n",
    "pyplot.scatter(train[\"DiabetesPedigreeFunction\"],train[\"Outcome\"],color='purple')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 145,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x25992bf5d68>"
      ]
     },
     "execution_count": 145,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = pyplot.figure()\n",
    "pyplot.scatter(train[\"Age\"],train[\"Outcome\"],color='black')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "有一些特征在分布上健康者与患病者分布有一定区别。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 特征编码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 148,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 768 entries, 0 to 767\n",
      "Data columns (total 8 columns):\n",
      "Pregnancies                 768 non-null int64\n",
      "Glucose                     768 non-null int64\n",
      "BloodPressure               768 non-null int64\n",
      "SkinThickness               768 non-null int64\n",
      "Insulin                     768 non-null int64\n",
      "BMI                         768 non-null float64\n",
      "DiabetesPedigreeFunction    768 non-null float64\n",
      "Age                         768 non-null int64\n",
      "dtypes: float64(2), int64(6)\n",
      "memory usage: 48.1 KB\n"
     ]
    }
   ],
   "source": [
    "\n",
    "#分离X，Y\n",
    "y_train = train['Outcome']   \n",
    "\n",
    "X_train=train.drop([\"Outcome\"],axis=1)\n",
    "\n",
    "X_train.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据预处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 149,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 数据标准化\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "# 初始化特征的标准化器\n",
    "ss_X = StandardScaler()\n",
    "\n",
    "# 分别对训练和测试数据的特征进行标准化处理\n",
    "X_train = ss_X.fit_transform(X_train)\n",
    "#X_test = ss_X.transform(X_test)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 模型训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 150,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_split.py:2026: FutureWarning: From version 0.21, test_size will always complement train_size unless both are specified.\n",
      "  FutureWarning)\n"
     ]
    }
   ],
   "source": [
    "# 根据题设条件，使用train_test_split随机将目标分为80%训练集与20%测试集\n",
    "from sklearn.model_selection import train_test_split\n",
    "X_train_part, X_val, y_train_part, y_val = train_test_split(X_train, y_train, train_size = 0.8,random_state = 0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### default Logistic Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 151,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "lr= LogisticRegression()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 152,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy of LR Classifier: 0.8311688311688312\n",
      "             precision    recall  f1-score   support\n",
      "\n",
      "    Healthy       0.85      0.93      0.88       107\n",
      "    Diabete       0.78      0.62      0.69        47\n",
      "\n",
      "avg / total       0.83      0.83      0.82       154\n",
      "\n"
     ]
    }
   ],
   "source": [
    "lr.fit(X_train, y_train)\n",
    "# 使用训练好的模型lr对X_test进行预测，结果储存在变量lr_y_predict中。\n",
    "lr_y_predict = lr.predict(X_val)\n",
    " \n",
    "# 使用逻辑斯蒂回归模型自带的评分函数score获得模型在测试集上的准确性结果。\n",
    "print (\"Accuracy of LR Classifier:\", lr.score(X_val, y_val))\n",
    "# 利用classification_report模块获得LogisticRegression其他三个指标的结果。\n",
    "print (metrics.classification_report(y_val, lr_y_predict, target_names=['Healthy', 'Diabete']))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这个结果准确率看上去还好，但实际上，患糖尿病的召回率RECALL仅有0.62，这表示38%的患者未能被检测出来，这个结果显然不能让人满意，\n",
    "我们需要在参数中加入权重选择"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 正则化的 Logistic Regression及参数调优"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "考虑到上阶段的效果，我们需要改变两类问题的权重，提高第二类Diabete的权重"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 153,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'penalty': ['l1', 'l2'], 'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000], 'class_weight': [{0: 0.2, 1: 0.8}]}\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=5, error_score='raise',\n",
       "       estimator=LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
       "          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
       "          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n",
       "          verbose=0, warm_start=False),\n",
       "       fit_params=None, iid=True, n_jobs=1,\n",
       "       param_grid={'penalty': ['l1', 'l2'], 'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000], 'class_weight': [{0: 0.2, 1: 0.8}]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 153,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "\n",
    "#需要调优的参数\n",
    "# 请尝试将L1正则和L2正则分开，并配合合适的优化求解算法（slover）\n",
    "#tuned_parameters = {'penalty':['l1','l2'],\n",
    "#                   'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "#                   }\n",
    "weight=[{0:0.2,1:0.8}]\n",
    "\n",
    "penaltys = ['l1','l2']\n",
    "Cs = [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "\n",
    "tuned_parameters = dict(penalty = penaltys, C = Cs,class_weight=weight)\n",
    "print(tuned_parameters)\n",
    "lr_penalty= LogisticRegression()\n",
    "grid= GridSearchCV(lr_penalty, tuned_parameters, cv=5, scoring='neg_log_loss')\n",
    "grid.fit(X_train_part,y_train_part)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([0.00079894, 0.00079932, 0.00059958, 0.00099931, 0.00119891,\n",
       "        0.00099945, 0.0009995 , 0.0009994 , 0.00119929, 0.00099921,\n",
       "        0.00099931, 0.00099936, 0.00119939, 0.0011991 ]),\n",
       " 'std_fit_time': array([3.99471564e-04, 3.99661331e-04, 4.89551027e-04, 1.16800773e-07,\n",
       "        3.99994918e-04, 3.98950589e-07, 7.13664510e-07, 3.81469727e-07,\n",
       "        3.99327374e-04, 5.84003864e-07, 1.90734863e-07, 2.43140197e-07,\n",
       "        3.98922280e-04, 4.00973174e-04]),\n",
       " 'mean_score_time': array([0.00080009, 0.00039983, 0.0007997 , 0.0007997 , 0.00039973,\n",
       "        0.0009995 , 0.00079961, 0.00019979, 0.00099921, 0.00079966,\n",
       "        0.00059967, 0.00079951, 0.00079937, 0.00059977]),\n",
       " 'std_score_time': array([4.00043141e-04, 4.89687246e-04, 3.99852179e-04, 3.99851810e-04,\n",
       "        4.89570491e-04, 4.10190833e-07, 3.99804183e-04, 3.99589539e-04,\n",
       "        3.69356475e-07, 3.99828000e-04, 4.89628909e-04, 3.99756556e-04,\n",
       "        3.99684963e-04, 4.89706738e-04]),\n",
       " 'param_C': masked_array(data=[0.001, 0.001, 0.01, 0.01, 0.1, 0.1, 1, 1, 10, 10, 100,\n",
       "                    100, 1000, 1000],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_class_weight': masked_array(data=[{0: 0.2, 1: 0.8}, {0: 0.2, 1: 0.8}, {0: 0.2, 1: 0.8},\n",
       "                    {0: 0.2, 1: 0.8}, {0: 0.2, 1: 0.8}, {0: 0.2, 1: 0.8},\n",
       "                    {0: 0.2, 1: 0.8}, {0: 0.2, 1: 0.8}, {0: 0.2, 1: 0.8},\n",
       "                    {0: 0.2, 1: 0.8}, {0: 0.2, 1: 0.8}, {0: 0.2, 1: 0.8},\n",
       "                    {0: 0.2, 1: 0.8}, {0: 0.2, 1: 0.8}],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_penalty': masked_array(data=['l1', 'l2', 'l1', 'l2', 'l1', 'l2', 'l1', 'l2', 'l1',\n",
       "                    'l2', 'l1', 'l2', 'l1', 'l2'],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'C': 0.001, 'class_weight': {0: 0.2, 1: 0.8}, 'penalty': 'l1'},\n",
       "  {'C': 0.001, 'class_weight': {0: 0.2, 1: 0.8}, 'penalty': 'l2'},\n",
       "  {'C': 0.01, 'class_weight': {0: 0.2, 1: 0.8}, 'penalty': 'l1'},\n",
       "  {'C': 0.01, 'class_weight': {0: 0.2, 1: 0.8}, 'penalty': 'l2'},\n",
       "  {'C': 0.1, 'class_weight': {0: 0.2, 1: 0.8}, 'penalty': 'l1'},\n",
       "  {'C': 0.1, 'class_weight': {0: 0.2, 1: 0.8}, 'penalty': 'l2'},\n",
       "  {'C': 1, 'class_weight': {0: 0.2, 1: 0.8}, 'penalty': 'l1'},\n",
       "  {'C': 1, 'class_weight': {0: 0.2, 1: 0.8}, 'penalty': 'l2'},\n",
       "  {'C': 10, 'class_weight': {0: 0.2, 1: 0.8}, 'penalty': 'l1'},\n",
       "  {'C': 10, 'class_weight': {0: 0.2, 1: 0.8}, 'penalty': 'l2'},\n",
       "  {'C': 100, 'class_weight': {0: 0.2, 1: 0.8}, 'penalty': 'l1'},\n",
       "  {'C': 100, 'class_weight': {0: 0.2, 1: 0.8}, 'penalty': 'l2'},\n",
       "  {'C': 1000, 'class_weight': {0: 0.2, 1: 0.8}, 'penalty': 'l1'},\n",
       "  {'C': 1000, 'class_weight': {0: 0.2, 1: 0.8}, 'penalty': 'l2'}],\n",
       " 'split0_test_score': array([-0.69314718, -0.67708974, -0.69314718, -0.63262312, -0.60767905,\n",
       "        -0.62180607, -0.62706748, -0.63112364, -0.6329834 , -0.63354851,\n",
       "        -0.63375899, -0.63382752, -0.6338445 , -0.63385585]),\n",
       " 'split1_test_score': array([-0.69314718, -0.67532771, -0.69314718, -0.62656494, -0.62144607,\n",
       "        -0.62781291, -0.64699355, -0.65228008, -0.65751054, -0.65818921,\n",
       "        -0.65879135, -0.65886744, -0.65892352, -0.65893628]),\n",
       " 'split2_test_score': array([-0.69314718, -0.6784691 , -0.69314718, -0.64479663, -0.66278613,\n",
       "        -0.66737149, -0.6958592 , -0.69854165, -0.70472015, -0.70512667,\n",
       "        -0.70583015, -0.70586753, -0.7059618 , -0.70594256]),\n",
       " 'split3_test_score': array([-0.69314718, -0.6782269 , -0.69314718, -0.64594408, -0.66017176,\n",
       "        -0.67601811, -0.71456311, -0.72056877, -0.7305238 , -0.73120984,\n",
       "        -0.73238109, -0.73245082, -0.73256525, -0.73257583]),\n",
       " 'split4_test_score': array([-0.69314718, -0.6747557 , -0.69314718, -0.6182347 , -0.58779621,\n",
       "        -0.58145018, -0.57285671, -0.57445243, -0.57394064, -0.57400009,\n",
       "        -0.57395798, -0.57396698, -0.57397858, -0.57396382]),\n",
       " 'mean_test_score': array([-0.69314718, -0.67677526, -0.69314718, -0.63363608, -0.62795579,\n",
       "        -0.6348905 , -0.65145354, -0.65537946, -0.6599169 , -0.66039655,\n",
       "        -0.66092496, -0.66097717, -0.66103577, -0.66103593]),\n",
       " 'std_test_score': array([0.        , 0.00149787, 0.        , 0.01060223, 0.02934665,\n",
       "        0.03405145, 0.05037773, 0.05137744, 0.0548553 , 0.05501701,\n",
       "        0.0554188 , 0.05543257, 0.05547145, 0.05547443]),\n",
       " 'rank_test_score': array([13, 12, 13,  2,  1,  3,  4,  5,  6,  7,  8,  9, 10, 11]),\n",
       " 'split0_train_score': array([-0.69314718, -0.67491963, -0.69314718, -0.62683002, -0.60847729,\n",
       "        -0.62021879, -0.63014043, -0.6335184 , -0.63624214, -0.63672142,\n",
       "        -0.63703474, -0.63708622, -0.6371156 , -0.63712322]),\n",
       " 'split1_train_score': array([-0.69314718, -0.67790392, -0.69314718, -0.63741089, -0.63505587,\n",
       "        -0.63583748, -0.64832391, -0.65046838, -0.65373822, -0.65409418,\n",
       "        -0.65447215, -0.65451312, -0.65454616, -0.65455567]),\n",
       " 'split2_train_score': array([-0.69314718, -0.67640887, -0.69314718, -0.63159299, -0.62585316,\n",
       "        -0.62978011, -0.64351956, -0.64577318, -0.64916059, -0.64952268,\n",
       "        -0.64991629, -0.64995084, -0.64999739, -0.64999427]),\n",
       " 'split3_train_score': array([-0.69314718, -0.67542625, -0.69314718, -0.62440451, -0.60402338,\n",
       "        -0.60512826, -0.60966631, -0.61277053, -0.61520206, -0.61560676,\n",
       "        -0.61591314, -0.61595447, -0.6159875 , -0.61598975]),\n",
       " 'split4_train_score': array([-0.69314718, -0.67671933, -0.69314718, -0.63418029, -0.62611756,\n",
       "        -0.63353903, -0.64498695, -0.6483827 , -0.65144865, -0.65185697,\n",
       "        -0.65221407, -0.6522536 , -0.65229413, -0.65229384]),\n",
       " 'mean_train_score': array([-0.69314718, -0.6762756 , -0.69314718, -0.63088374, -0.61990545,\n",
       "        -0.62490073, -0.63532743, -0.63818264, -0.64115833, -0.6415604 ,\n",
       "        -0.64191008, -0.64195165, -0.64198815, -0.64199135]),\n",
       " 'std_train_score': array([0.        , 0.00104174, 0.        , 0.00474103, 0.01171617,\n",
       "        0.0112331 , 0.01424587, 0.01400091, 0.01432534, 0.01430748,\n",
       "        0.01433658, 0.01433481, 0.01433764, 0.01433759])}"
      ]
     },
     "execution_count": 154,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# view the complete results (list of named tuples)\n",
    "grid.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 155,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.627955791545288\n",
      "{'C': 0.1, 'class_weight': {0: 0.2, 1: 0.8}, 'penalty': 'l1'}\n"
     ]
    }
   ],
   "source": [
    "# examine the best model\n",
    "print(-grid.best_score_)\n",
    "print(grid.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 156,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy of LR Classifier: 0.7727272727272727\n",
      "             precision    recall  f1-score   support\n",
      "\n",
      "    Healthy       0.92      0.74      0.82       107\n",
      "    Diabete       0.59      0.85      0.70        47\n",
      "\n",
      "avg / total       0.82      0.77      0.78       154\n",
      "\n"
     ]
    }
   ],
   "source": [
    "lr_nodefault=LogisticRegression(C=0.1,class_weight={0: 0.3, 1: 0.7},penalty='l1')\n",
    "lr_nodefault.fit(X_train, y_train)\n",
    "# 使用训练好的模型lr对X_test进行预测，结果储存在变量lr_y_predict中。\n",
    "lr_nodefault_y_predict = lr_nodefault.predict(X_val)\n",
    " \n",
    "# 使用逻辑斯蒂回归模型自带的评分函数score获得模型在测试集上的准确性结果。\n",
    "print (\"Accuracy of LR Classifier:\", lr_nodefault.score(X_val, y_val))\n",
    "# 利用classification_report模块获得LogisticRegression其他三个指标的结果。\n",
    "print (metrics.classification_report(y_val, lr_nodefault_y_predict, target_names=['Healthy', 'Diabete']))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "权重比例为3：7的情况下，糖尿病召回率85%，总的预测准确率也达到82%，这样的代价是患病者的检测正确率较高"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 157,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy of LR Classifier: 0.7142857142857143\n",
      "             precision    recall  f1-score   support\n",
      "\n",
      "    Healthy       0.97      0.61      0.75       107\n",
      "    Diabete       0.52      0.96      0.67        47\n",
      "\n",
      "avg / total       0.83      0.71      0.72       154\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[65, 42],\n",
       "       [ 2, 45]], dtype=int64)"
      ]
     },
     "execution_count": 157,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_nodefault=LogisticRegression(C=0.1,class_weight={0: 0.2, 1: 0.8},penalty='l1')\n",
    "lr_nodefault.fit(X_train, y_train)\n",
    "# 使用训练好的模型lr对X_test进行预测，结果储存在变量lr_y_predict中。\n",
    "lr_nodefault_y_predict = lr_nodefault.predict(X_val)\n",
    " \n",
    "# 使用逻辑斯蒂回归模型自带的评分函数score获得模型在测试集上的准确性结果。\n",
    "print (\"Accuracy of LR Classifier:\", lr_nodefault.score(X_val, y_val))\n",
    "# 利用classification_report模块获得LogisticRegression其他三个指标的结果。\n",
    "print (metrics.classification_report(y_val, lr_nodefault_y_predict, target_names=['Healthy', 'Diabete']))\n",
    "metrics.confusion_matrix(y_val, lr_nodefault_y_predict)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "权重提高到2：8时，糖尿病召回率96%，总检测准确率不够高，虚警率较高。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 158,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#pd.DataFrame(grid.cv_results_).to_csv('LogisticGridSearchCV_Otto.csv')\n",
    "#cvresult = pd.DataFrame.from_csv('LogisticGridSearchCV_Otto.csv')\n",
    "#test_means = cv_results['mean_test_score']\n",
    "#test_stds = cv_results['std_test_score'] \n",
    "#train_means = cvresult['mean_train_score']\n",
    "#train_stds = cvresult['std_train_score'] \n",
    "\n",
    "\n",
    "# plot CV误差曲线\n",
    "test_means = grid.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = grid.cv_results_[ 'std_test_score' ]\n",
    "train_means = grid.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = grid.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "\n",
    "# plot results\n",
    "n_Cs = len(Cs)\n",
    "number_penaltys = len(penaltys)\n",
    "test_scores = np.array(test_means).reshape(n_Cs,number_penaltys)\n",
    "train_scores = np.array(train_means).reshape(n_Cs,number_penaltys)\n",
    "test_stds = np.array(test_stds).reshape(n_Cs,number_penaltys)\n",
    "train_stds = np.array(train_stds).reshape(n_Cs,number_penaltys)\n",
    "\n",
    "x_axis = np.log10(Cs)\n",
    "for i, value in enumerate(penaltys):\n",
    "    #pyplot.plot(log(Cs), test_scores[i], label= 'penalty:'   + str(value))\n",
    "    pyplot.errorbar(x_axis, test_scores[:,i], yerr=test_stds[:,i] ,label = penaltys[i] +' Test')\n",
    "    pyplot.errorbar(x_axis, train_scores[:,i], yerr=train_stds[:,i] ,label = penaltys[i] +' Train')\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'neg-logloss' )\n",
    "pyplot.savefig('LogisticGridSearchCV_C.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上图给出了L1正则和L2正则下、不同正则参数C对应的模型在训练集上测试集上的正确率（score）。可以看出在训练集上C越大（正则越少）的模型性能越好；但在测试集上当C=0.1时性能最好（L1正则和L2正则均是），L1的性能更好"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### default SVC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 159,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#LinearSVC不能得到每类的概率，在Otto数据集要求输出每类的概率，这里只是示意SVM的使用方法\n",
    "#https://xacecask2.gitbooks.io/scikit-learn-user-guide-chinese-version/content/sec1.4.html\n",
    "#1.4.1.2. 得分与概率\n",
    "from sklearn.svm import LinearSVC\n",
    "from sklearn import metrics\n",
    "\n",
    "SVC1 = LinearSVC().fit(X_train_part, y_train_part)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 160,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Classification report for classifier LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,\n",
      "     intercept_scaling=1, loss='squared_hinge', max_iter=1000,\n",
      "     multi_class='ovr', penalty='l2', random_state=None, tol=0.0001,\n",
      "     verbose=0):\n",
      "             precision    recall  f1-score   support\n",
      "\n",
      "          0       0.84      0.92      0.88       107\n",
      "          1       0.76      0.62      0.68        47\n",
      "\n",
      "avg / total       0.82      0.82      0.82       154\n",
      "\n",
      "\n",
      "Confusion matrix:\n",
      "[[98  9]\n",
      " [18 29]]\n"
     ]
    }
   ],
   "source": [
    "#在校验集上测试，估计模型性能\n",
    "y_predict = SVC1.predict(X_val)\n",
    "\n",
    "print(\"Classification report for classifier %s:\\n%s\\n\" % (SVC1,metrics.classification_report(y_val, y_predict)))\n",
    "print(\"Confusion matrix:\\n%s\" % metrics.confusion_matrix(y_val, y_predict))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 线性SVM正则参数调优"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "线性SVM LinearSVC的需要调整正则超参数包括C（正则系数，一般在log域（取log后的值）均匀设置候选参数）和正则函数penalty（L2/L1） \n",
    "\n",
    "采用交叉验证，网格搜索步骤与Logistic回归正则参数处理类似，在此略。\n",
    "\n",
    "这里我们用校验集（X_val、y_val）来估计模型性能"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 161,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def fit_grid_point_Linear(C, X_train, y_train, X_val, y_val):\n",
    "    \n",
    "    # 在训练集是那个利用SVC训练\n",
    "    SVC2 =  LinearSVC( C = C)\n",
    "    SVC2 = SVC2.fit(X_train_part, y_train_part)\n",
    "    svc_predict = SVC2.predict(X_val)\n",
    "    recall=metrics.recall_score(y_val,  svc_predict)\n",
    "    \n",
    "    # 在校验集上返回accuracy\n",
    "    accuracy = SVC2.score(X_val, y_val)\n",
    "    \n",
    "    print(\"accuracy: {}\".format(accuracy))\n",
    "    print(\"recall: {}\".format(recall))\n",
    "    print(\"------------------------------------------\")\n",
    "\n",
    "\n",
    "    return accuracy,recall"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 162,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: 0.7857142857142857\n",
      "recall: 0.6170212765957447\n",
      "------------------------------------------\n",
      "accuracy: 0.8246753246753247\n",
      "recall: 0.6170212765957447\n",
      "------------------------------------------\n",
      "accuracy: 0.8246753246753247\n",
      "recall: 0.6170212765957447\n",
      "------------------------------------------\n",
      "accuracy: 0.8246753246753247\n",
      "recall: 0.6170212765957447\n",
      "------------------------------------------\n",
      "accuracy: 0.8246753246753247\n",
      "recall: 0.6170212765957447\n",
      "------------------------------------------\n",
      "accuracy: 0.7402597402597403\n",
      "recall: 0.5531914893617021\n",
      "------------------------------------------\n",
      "accuracy: 0.6753246753246753\n",
      "recall: 0.8936170212765957\n",
      "------------------------------------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "No handles with labels found to put in legend.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#需要调优的参数\n",
    "C_s = np.logspace(-3, 3, 7)# logspace(a,b,N)把10的a次方到10的b次方区间分成N份  \n",
    "#penalty_s = ['l1','l2']\n",
    "#m_weight={0:0.35,1:0.65}\n",
    "\n",
    "accuracy_s = []\n",
    "recall_s=[]\n",
    "for i, oneC in enumerate(C_s):\n",
    "#   for j, penalty in enumerate(penalty_s):\n",
    "    tmp,tmp2 = fit_grid_point_Linear(oneC, X_train_part, y_train_part, X_val, y_val)\n",
    "    accuracy_s.append(tmp)\n",
    "    recall_s.append(tmp2)\n",
    "x_axis = np.log10(C_s)\n",
    "#for j, penalty in enumerate(penalty_s):\n",
    "pyplot.plot(x_axis, np.array(accuracy_s), 'b-')\n",
    "pyplot.plot(x_axis, np.array(recall_s), 'r-')  \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'accuracy recall' )\n",
    "pyplot.savefig('SVM_Diabetes0.png' )\n",
    "\n",
    "pyplot.show()\n",
    "  \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 163,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def fit_grid_point_Linear_with_weight(C, weight, X_train, y_train, X_val, y_val):\n",
    "    \n",
    "    # 在训练集是那个利用SVC训练\n",
    "    SVC2 =  LinearSVC( C = C,class_weight=weight)\n",
    "    SVC2 = SVC2.fit(X_train_part, y_train_part)\n",
    "    svc_predict = SVC2.predict(X_val)\n",
    "    recall=metrics.recall_score(y_val,  svc_predict)\n",
    "    \n",
    "    # 在校验集上返回accuracy\n",
    "    accuracy = SVC2.score(X_val, y_val)\n",
    "    \n",
    "    print(\"accuracy: {}\".format(accuracy))\n",
    "    print(\"recall: {}\".format(recall))\n",
    "    print(\"------------------------------------------\")\n",
    "    return accuracy,recall"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 164,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "No handles with labels found to put in legend.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: 0.7662337662337663\n",
      "recall: 0.851063829787234\n",
      "------------------------------------------\n",
      "accuracy: 0.7792207792207793\n",
      "recall: 0.8085106382978723\n",
      "------------------------------------------\n",
      "accuracy: 0.7727272727272727\n",
      "recall: 0.8085106382978723\n",
      "------------------------------------------\n",
      "accuracy: 0.7727272727272727\n",
      "recall: 0.8085106382978723\n",
      "------------------------------------------\n",
      "accuracy: 0.7727272727272727\n",
      "recall: 0.8085106382978723\n",
      "------------------------------------------\n",
      "accuracy: 0.7467532467532467\n",
      "recall: 0.6595744680851063\n",
      "------------------------------------------\n",
      "accuracy: 0.7857142857142857\n",
      "recall: 0.6808510638297872\n",
      "------------------------------------------\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#需要调优的参数\n",
    "C_s = np.logspace(-3, 3, 7)# logspace(a,b,N)把10的a次方到10的b次方区间分成N份  \n",
    "#penalty_s = ['l1','l2']\n",
    "m_weight={0:0.35,1:0.65}\n",
    "\n",
    "accuracy_s = []\n",
    "recall_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "#    for j, penalty in enumerate(penalty_s):\n",
    "    tmp,tmp2 = fit_grid_point_Linear_with_weight(oneC, m_weight, X_train_part, y_train_part, X_val, y_val)\n",
    "    accuracy_s.append(tmp)\n",
    "    recall_s.append(tmp2)\n",
    "x_axis = np.log10(C_s)\n",
    "#for j, penalty in enumerate(penalty_s):\n",
    "pyplot.plot(x_axis, np.array(accuracy_s), 'b-')\n",
    "pyplot.plot(x_axis, np.array(recall_s), 'r-')    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'accuracy recall' )\n",
    "pyplot.savefig('SVM_Diabetes.png' )\n",
    "\n",
    "pyplot.show()\n",
    "  \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### RBF核SVM正则参数调优\n",
    "\n",
    "RBF核是SVM最常用的核函数。\n",
    "RBF核SVM 的需要调整正则超参数包括C（正则系数，一般在log域（取log后的值）均匀设置候选参数）和核函数的宽度gamma\n",
    "C越小，决策边界越平滑； \n",
    "gamma越小，决策边界越平滑。\n",
    "\n",
    "采用交叉验证，网格搜索步骤与Logistic回归正则参数处理类似，在此略。\n",
    "\n",
    "这里我们用校验集（X_val、y_val）来估计模型性能"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 165,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.svm import SVC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 166,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def fit_grid_point_RBF(C, gamma, X_train, y_train, X_val, y_val):\n",
    "    \n",
    "    # 在训练集是那个利用SVC训练\n",
    "    SVC3 =  SVC( C = C, kernel='rbf', gamma = gamma)\n",
    "    SVC3 = SVC3.fit(X_train, y_train)\n",
    "    \n",
    "    # 在校验集上返回accuracy\n",
    "    accuracy = SVC3.score(X_val, y_val)\n",
    "    print(\" C:{}\".format(C),\" gamma:{}\".format(gamma),\" accuracy: {}\".format(accuracy))\n",
    "    return accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 167,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " C:0.0001  gamma:0.0001  accuracy: 0.6948051948051948\n",
      " C:0.0001  gamma:0.001  accuracy: 0.6948051948051948\n",
      " C:0.0001  gamma:0.01  accuracy: 0.6948051948051948\n",
      " C:0.0001  gamma:0.1  accuracy: 0.6948051948051948\n",
      " C:0.0001  gamma:1.0  accuracy: 0.6948051948051948\n",
      " C:0.0001  gamma:10.0  accuracy: 0.6948051948051948\n",
      " C:0.0001  gamma:100.0  accuracy: 0.6948051948051948\n",
      " C:0.0001  gamma:1000.0  accuracy: 0.6948051948051948\n",
      " C:0.0001  gamma:10000.0  accuracy: 0.6948051948051948\n",
      " C:0.001  gamma:0.0001  accuracy: 0.6948051948051948\n",
      " C:0.001  gamma:0.001  accuracy: 0.6948051948051948\n",
      " C:0.001  gamma:0.01  accuracy: 0.6948051948051948\n",
      " C:0.001  gamma:0.1  accuracy: 0.6948051948051948\n",
      " C:0.001  gamma:1.0  accuracy: 0.6948051948051948\n",
      " C:0.001  gamma:10.0  accuracy: 0.6948051948051948\n",
      " C:0.001  gamma:100.0  accuracy: 0.6948051948051948\n",
      " C:0.001  gamma:1000.0  accuracy: 0.6948051948051948\n",
      " C:0.001  gamma:10000.0  accuracy: 0.6948051948051948\n",
      " C:0.01  gamma:0.0001  accuracy: 0.6948051948051948\n",
      " C:0.01  gamma:0.001  accuracy: 0.6948051948051948\n",
      " C:0.01  gamma:0.01  accuracy: 0.6948051948051948\n",
      " C:0.01  gamma:0.1  accuracy: 0.6948051948051948\n",
      " C:0.01  gamma:1.0  accuracy: 0.6948051948051948\n",
      " C:0.01  gamma:10.0  accuracy: 0.6948051948051948\n",
      " C:0.01  gamma:100.0  accuracy: 0.6948051948051948\n",
      " C:0.01  gamma:1000.0  accuracy: 0.6948051948051948\n",
      " C:0.01  gamma:10000.0  accuracy: 0.6948051948051948\n",
      " C:0.1  gamma:0.0001  accuracy: 0.6948051948051948\n",
      " C:0.1  gamma:0.001  accuracy: 0.6948051948051948\n",
      " C:0.1  gamma:0.01  accuracy: 0.6948051948051948\n",
      " C:0.1  gamma:0.1  accuracy: 0.8051948051948052\n",
      " C:0.1  gamma:1.0  accuracy: 0.6948051948051948\n",
      " C:0.1  gamma:10.0  accuracy: 0.6948051948051948\n",
      " C:0.1  gamma:100.0  accuracy: 0.6948051948051948\n",
      " C:0.1  gamma:1000.0  accuracy: 0.6948051948051948\n",
      " C:0.1  gamma:10000.0  accuracy: 0.6948051948051948\n",
      " C:1.0  gamma:0.0001  accuracy: 0.6948051948051948\n",
      " C:1.0  gamma:0.001  accuracy: 0.7012987012987013\n",
      " C:1.0  gamma:0.01  accuracy: 0.8246753246753247\n",
      " C:1.0  gamma:0.1  accuracy: 0.7792207792207793\n",
      " C:1.0  gamma:1.0  accuracy: 0.7597402597402597\n",
      " C:1.0  gamma:10.0  accuracy: 0.6948051948051948\n",
      " C:1.0  gamma:100.0  accuracy: 0.6948051948051948\n",
      " C:1.0  gamma:1000.0  accuracy: 0.6948051948051948\n",
      " C:1.0  gamma:10000.0  accuracy: 0.6948051948051948\n",
      " C:10.0  gamma:0.0001  accuracy: 0.7012987012987013\n",
      " C:10.0  gamma:0.001  accuracy: 0.8181818181818182\n",
      " C:10.0  gamma:0.01  accuracy: 0.8181818181818182\n",
      " C:10.0  gamma:0.1  accuracy: 0.7662337662337663\n",
      " C:10.0  gamma:1.0  accuracy: 0.7077922077922078\n",
      " C:10.0  gamma:10.0  accuracy: 0.6883116883116883\n",
      " C:10.0  gamma:100.0  accuracy: 0.6948051948051948\n",
      " C:10.0  gamma:1000.0  accuracy: 0.6948051948051948\n",
      " C:10.0  gamma:10000.0  accuracy: 0.6948051948051948\n",
      " C:100.0  gamma:0.0001  accuracy: 0.8181818181818182\n",
      " C:100.0  gamma:0.001  accuracy: 0.8246753246753247\n",
      " C:100.0  gamma:0.01  accuracy: 0.7922077922077922\n",
      " C:100.0  gamma:0.1  accuracy: 0.7532467532467533\n",
      " C:100.0  gamma:1.0  accuracy: 0.7077922077922078\n",
      " C:100.0  gamma:10.0  accuracy: 0.6883116883116883\n",
      " C:100.0  gamma:100.0  accuracy: 0.6948051948051948\n",
      " C:100.0  gamma:1000.0  accuracy: 0.6948051948051948\n",
      " C:100.0  gamma:10000.0  accuracy: 0.6948051948051948\n",
      " C:1000.0  gamma:0.0001  accuracy: 0.8246753246753247\n",
      " C:1000.0  gamma:0.001  accuracy: 0.8116883116883117\n",
      " C:1000.0  gamma:0.01  accuracy: 0.7792207792207793\n",
      " C:1000.0  gamma:0.1  accuracy: 0.7207792207792207\n",
      " C:1000.0  gamma:1.0  accuracy: 0.7077922077922078\n",
      " C:1000.0  gamma:10.0  accuracy: 0.6883116883116883\n",
      " C:1000.0  gamma:100.0  accuracy: 0.6948051948051948\n",
      " C:1000.0  gamma:1000.0  accuracy: 0.6948051948051948\n",
      " C:1000.0  gamma:10000.0  accuracy: 0.6948051948051948\n",
      " C:10000.0  gamma:0.0001  accuracy: 0.8246753246753247\n",
      " C:10000.0  gamma:0.001  accuracy: 0.7922077922077922\n",
      " C:10000.0  gamma:0.01  accuracy: 0.7597402597402597\n",
      " C:10000.0  gamma:0.1  accuracy: 0.7402597402597403\n",
      " C:10000.0  gamma:1.0  accuracy: 0.7077922077922078\n",
      " C:10000.0  gamma:10.0  accuracy: 0.6883116883116883\n",
      " C:10000.0  gamma:100.0  accuracy: 0.6948051948051948\n",
      " C:10000.0  gamma:1000.0  accuracy: 0.6948051948051948\n",
      " C:10000.0  gamma:10000.0  accuracy: 0.6948051948051948\n"
     ]
    }
   ],
   "source": [
    "#需要调优的参数\n",
    "C_s = np.logspace(-4, 4, 9)# logspace(a,b,N)把10的a次方到10的b次方区间分成N份 \n",
    "gamma_s = np.logspace(-4, 4, 9)  \n",
    "\n",
    "accuracy_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "    for j, gamma in enumerate(gamma_s):\n",
    "        tmp = fit_grid_point_RBF(oneC, gamma, X_train_part, y_train_part, X_val, y_val)\n",
    "        accuracy_s.append(tmp)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 168,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "accuracy_s1 =np.array(accuracy_s).reshape(len(C_s),len(gamma_s))\n",
    "x_axis = np.log10(C_s)\n",
    "for j, gamma in enumerate(gamma_s):\n",
    "    pyplot.plot(x_axis, np.array(accuracy_s1[:,j]), label = ' Test - log(gamma)' + str(np.log10(gamma)))\n",
    "\n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'accuracy' )\n",
    "pyplot.savefig('RBF_SVM_Otto.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从上述部分运行结果来看，gamma参数设置不合适（gamma越大，对应RBF核的sigma越小，决策边界更复杂，可能发生了过拟合）\n",
    "所以调小gamma值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最佳C为1， gamma为0.01"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 169,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy of SVC-RBF Classifier: 0.8246753246753247\n",
      "             precision    recall  f1-score   support\n",
      "\n",
      "    Healthy       0.84      0.92      0.88       107\n",
      "    Diabete       0.76      0.62      0.68        47\n",
      "\n",
      "avg / total       0.82      0.82      0.82       154\n",
      "\n"
     ]
    }
   ],
   "source": [
    "SVC4 =  SVC( C = 1, kernel='rbf', gamma = 0.01)\n",
    "SVC4 = SVC4.fit(X_train_part, y_train_part)\n",
    "\n",
    "svc4_predict = SVC4.predict(X_val)\n",
    "print (\"Accuracy of SVC-RBF Classifier:\", SVC4.score(X_val, y_val))\n",
    "# 利用classification_report模块获得LogisticRegression其他三个指标的结果。\n",
    "print (metrics.classification_report(y_val, svc4_predict, target_names=['Healthy', 'Diabete']))\n",
    "\n",
    "\n",
    "\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
